package com.wgh.product.api.client;

import com.wgh.product.api.fallback.ProductTagClientFallback;
import com.wgh.product.dto.ProductTagDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 商品标签管理客户端接口
 */
@FeignClient(name = "shop-product", fallback = ProductTagClientFallback.class)
public interface ProductTagClient {

    /**
     * 根据ID查询标签信息
     */
    @GetMapping("/api/product-tag/{id}")
    ProductTagDTO findById(@PathVariable("id") Long id);

    /**
     * 批量查询标签信息
     */
    @GetMapping("/api/product-tag/list")
    List<ProductTagDTO> findListByIds(@RequestParam("ids") List<Long> ids);

    /**
     * 查询所有启用的标签
     */
    @GetMapping("/api/product-tag/enabled")
    List<ProductTagDTO> findEnabledList();

    /**
     * 分页查询标签列表
     */
    @GetMapping("/api/product-tag/page")
    List<ProductTagDTO> findPage(@RequestParam("page") Integer page, 
                                @RequestParam("size") Integer size);

    /**
     * 根据商品ID查询关联的标签列表
     */
    @GetMapping("/api/product-tag/product/{productId}")
    List<ProductTagDTO> findListByProductId(@PathVariable("productId") Long productId);

    /**
     * 根据标签名称查询标签
     */
    @GetMapping("/api/product-tag/name/{name}")
    ProductTagDTO getTagByName(@PathVariable String name);

    /**
     * 查询标签关联的商品数量
     */
    @GetMapping("/api/product-tag/{id}/product-count")
    Integer countProductsByTagId(@PathVariable Long id);

    /**
     * 批量更新标签状态
     */
    @PutMapping("/api/product-tag/status/batch")
    Boolean updateStatusBatch(@RequestParam List<Long> ids, @RequestParam Integer status);

    /**
     * 搜索标签
     */
    @GetMapping("/api/product-tag/search")
    List<ProductTagDTO> searchTags(@RequestParam String keyword);

    /**
     * 分页查询标签（兼容新接口）
     */
    @GetMapping("/api/product-tag/page")
    List<ProductTagDTO> getTagPage(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize);

    /**
     * 批量查询标签（兼容新接口）
     */
    @GetMapping("/api/product-tag/batch")
    List<ProductTagDTO> getTagsByIds(@RequestParam List<Long> ids);

    /**
     * 新增标签
     */
    @PostMapping("/api/product-tag")
    Boolean addTag(@RequestBody ProductTagDTO productTagDTO);

    /**
     * 更新标签
     */
    @PutMapping("/api/product-tag")
    Boolean updateTag(@RequestBody ProductTagDTO productTagDTO);

    /**
     * 删除标签
     */
    @DeleteMapping("/api/product-tag/{id}")
    Boolean deleteTag(@PathVariable Long id);

    /**
     * 批量删除标签
     */
    @DeleteMapping("/api/product-tag/batch")
    Boolean deleteTagsBatch(@RequestParam List<Long> ids);
}